package com.smart.community.property.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.smart.community.commons.entity.property.UserPropertyCompany;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户物业公司关联Mapper接口
 * 
 * 注意：此Mapper直接继承BaseMapper，不使用IBaseMapper
 * 原因：UserPropertyCompany实体类不再继承BaseEntity，不符合IBaseMapper的泛型约束
 * 设计原则：根据"智慧社区微服务架构总览.md"中的关联表设计原则
 * 
 * @author Wu.Liang
 * @since 2025-06-29
 * @version 1.0.0
 */
@Mapper
public interface UserPropertyCompanyMapper extends BaseMapper<UserPropertyCompany> {
    /**
     * 根据用户ID和物业公司ID查询关联信息
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 关联信息
     */
    UserPropertyCompany selectByUserIdAndPropertyCompanyId(@Param("userId") Long userId, @Param("propertyCompanyId") Long propertyCompanyId);
    
    /**
     * 根据物业公司ID查询用户关联列表
     * @param propertyCompanyId 物业公司ID
     * @return 用户关联列表
     */
    List<UserPropertyCompany> selectByPropertyCompanyId(@Param("propertyCompanyId") Long propertyCompanyId);
    
    /**
     * 根据状态查询用户关联列表
     * @param status 状态
     * @return 用户关联列表
     */
    List<UserPropertyCompany> selectByStatus(@Param("status") Integer status);
    
    /**
     * 根据用户ID删除关联信息
     * @param userId 用户ID
     * @return 删除数量
     */
    int deleteByUserId(@Param("userId") Long userId);
    
    /**
     * 根据用户ID和物业公司ID删除关联信息
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 删除数量
     */
    int deleteByUserIdAndPropertyCompanyId(@Param("userId") Long userId, @Param("propertyCompanyId") Long propertyCompanyId);
    
    /**
     * 根据物业公司ID删除关联信息
     * @param propertyCompanyId 物业公司ID
     * @return 删除数量
     */
    int deleteByPropertyCompanyId(@Param("propertyCompanyId") Long propertyCompanyId);
    
    /**
     * 检查用户是否有关联的物业公司
     * @param userId 用户ID
     * @return 是否有关联
     */
    Boolean existsByUserId(@Param("userId") Long userId);
    
    /**
     * 检查用户与物业公司的关联是否存在
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 是否存在
     */
    Boolean existsByUserIdAndPropertyCompanyId(@Param("userId") Long userId, @Param("propertyCompanyId") Long propertyCompanyId);
} 